<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>

//【示例1】下面示例演示了如何利用for/in语句遍历数组，并读取枚举中临时变量和元素的值的方法：
var a = [1, true, "abc", 34, false]; 	// 声明并初始化数组变量
for(var b in a) 						// 遍历数组
{
    alert(b); 							// 显示枚举中临时变量值
    alert(a[b]); 						// 显示每个元素的值
}
//【示例2】针对上面示例，可以使用如下两种结构实现相同的设计目的。

var a = [1, true, "abc", 34, false];
for(var b = 0; b < a.length; b ++ )
{
    alert(b);
    alert(a[b]);
}

var a = [1, true, "abc", 34, false];
var b = 0;
while(b < a.length )
{
    alert(b);
    alert(a[b]);
    b ++ ;
}
//【示例3】在下面示例中，定义一个对象o，该对象中包含3个属性，同时定义一个空数组、一个临时变量n。然后定义一个空数组，利用枚举法把对象的所有属性名复制到数组中。
var o ={				// 定义包含3个属性的对象
    x : 1,
    y : true,
    z : "true"
};
var a = [];				// 定义空数组
var n = 0; 				// 定义临时循环变量，并赋值为0
for(a[n ++ ] in o); 	// 遍历对象o，然后把所有属性都赋值到数组中

for(a[n ++ ] in o) 		// 遍历对象o
{
    ; 					// 空语句
}
//【示例4】针对上面的示例，可以使用如下结构遍历数组，并读取存储的值：
for(var i = 0 in a) 	// 遍历数组a，在该结构中直接声明并初始化临时变量i
{
    alert(i); 			// 读取临时变量i的值
    alert(a[i]); 		// 读取数组元素的值
}
//【示例5】在下面示例中，for/in是无法读取内置对象Object所有属性。
for(var i = 0 in Object)
{
    alert(i);
    alert(a[i]);
}

for(var i = 0 in document)
{
    document.write("document."+i+"="+document[i]);
     document.write("<br />");
}

//【示例6】为Object内置对象自定义两个属性，则在for/in结构中可以枚举它们：
Object.a = 1; 					// 为内部Object对象定义属性a
Object.b =true; 				// 为内部Object对象定义属性b
for(var i = 0 in Object) 		// 遍历Object对象
{
    alert(i);
    alert(Object[i]);
}
//【示例7】for/in结构能够枚举对象内所有可枚举的属性，包括原生属性和继承属性，这也带来一个问题：如果仅希望修改数组原生元素，而该数组还存在继承值或额外属性值，那么将给操作带来麻烦。
Array.prototype.x = "x";			// 自定义数组对象的继承属性
var a = [1,2,3]; 					// 定义数组对象，并赋值
a.y = "y";							// 定义数组对象的额外属性
for(var i in a) 					// 遍历数组对象a
{
    alert(i + ":" + a[i]);
}

for(var i = 0; i < a.length ; i ++ )
{
    alert(i + ":" + a[i]);
}




</script>
</head>
<body>




</body>
</html>
